/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.cultuurschuur.services;

import be.cultuurschuur.Controllers.*;
import be.cultuurschuur.entity.*;
import be.cultuurschuur.interfaces.*;
import java.io.*;
import java.text.DateFormat;
import java.util.*;
import java.util.logging.*;
import javax.faces.context.*;
import javax.persistence.*;


/**
 *
 * @author Jolien
 */
public class BLPeriode implements PeriodeInterface
{
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("cultuurschuurPU");
    EntityManager em = emf.createEntityManager();
    EntityTransaction tx = em.getTransaction();
    
    private Date vertrekdatum;
    private Date terugkeerdatum;

    public String getVertrekdatum()
    {
        DateFormat df = DateFormat.getDateInstance();
        return df.format(vertrekdatum);
    }

    public void setVertrekdatum(Date vertrekdatum) {
        this.vertrekdatum = vertrekdatum;
    }

    public String getTerugkeerdatum()
    {
        DateFormat df = DateFormat.getDateInstance();
        return df.format(terugkeerdatum);
    }

    public void setTerugkeerdatum(Date terugkeerdatum) {
        this.terugkeerdatum = terugkeerdatum;
    }
    
    @Override
    public Periode insertPeriode()
    { 
        tx.begin();
        Periode periode = new Periode();
        periode.setTerugkeerdatum(sqlDate(terugkeerdatum));
        periode.setVertrekdatum(sqlDate(vertrekdatum));
        
        em.persist(periode);
        tx.commit();
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("periode.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(VervoerController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return periode;
    }
    
    @Override
    public List<Periode> getPerioden()
    {
        List<Periode> periodelijst = em.createNamedQuery("Periode.getAll").getResultList();

        return periodelijst;
    }
    
    public java.sql.Date sqlDate(java.util.Date calendarDate)
    {
        return new java.sql.Date(calendarDate.getTime());
    }

    
    @Override
    public Periode getPeriodeById(int id)
    {
        Query q = em.createNamedQuery("Periode.getById");
        q.setParameter(1, id);
        Periode periode = (Periode)q.getSingleResult();
        return periode;
    }
    @Override
    public Periode updatePeriode(Periode periode)
    {
        tx.begin();

        Periode p = em.find(Periode.class, periode.getId());
        p.setTerugkeerdatum(periode.getTerugkeerdatum());
        p.setVertrekdatum(periode.getVertrekdatum());
        
        em.persist(p);

        tx.commit();
        return p;
    }
    @Override
    public boolean deletePeriode(int id)
    {
        try {
            tx.begin();

            Periode p = em.find(Periode.class, id);
            em.remove(p);
            tx.commit();
            return true;
        } catch (Exception exc) {
            return false;
        }
    }
}
